/**
 * init_helper.js
 * 项目页面初始化辅助工具
 */

// 导入错误处理助手
const errorHelper = require('../../../config/path_resolver.js').pageHelper;

// 尝试加载Store
let storeModule;
try {
  storeModule = require('../../../config/path_resolver.js').getRootConfigPath('path_resolver.js').getRootConfigPath('store_config.js');
  console.log('成功加载PLM项目Store模块');
} catch (e) {
  console.error('加载PLM项目Store模块失败，使用空实现', e);
  // 提供空实现
  storeModule = {
    plmProjectStore: {},
    mobxConfig: {
      configureMobX: () => {}
    }
  };
}

/**
 * 安全初始化Store到页面实例
 * @param {Page} pageInstance - 页面实例
 * @param {Object} options - 配置选项
 * @returns {Object} 初始化后的Store引用
 */
function initStoreSafely(pageInstance, options = {}) {
  if (!pageInstance) {
    console.error('页面实例不能为空');
    return null;
  }
  
  try {
    // 确保MobX配置已初始化
    storeModule.mobxConfig.configureMobX();
    
    // 绑定store到页面实例
    const store = storeModule.plmProjectStore;
    pageInstance.store = store;
    
    // 如果提供了storeBindings，设置MobX绑定
    if (options.setupStoreBindings && typeof pageInstance.storeBindings === 'undefined') {
      setupStoreBindings(pageInstance, store);
    }
    
    return store;
  } catch (error) {
    console.error('初始化Store失败:', error);
    errorHelper.logError('Store初始化', error);
    
    // 返回空Store以避免后续错误
    return { loading: false, error: null };
  }
}

/**
 * 设置Store绑定
 * @param {Page} pageInstance - 页面实例
 * @param {Object} store - Store对象
 */
function setupStoreBindings(pageInstance, store) {
  try {
    // 尝试导入绑定工具
    const { createStoreBindings } = require('mobx-miniprogram-bindings');
    
    // 创建绑定
    pageInstance.storeBindings = createStoreBindings(pageInstance, {
      store,
      fields: ['loading', 'projects', 'projectList', 'pagination', 'filters', 'error'],
      actions: ['getProjectList', 'loadMoreProjects', 'setFilters', 'clearAllCache']
    });
    
    // 添加onUnload钩子清理绑定
    const originalOnUnload = pageInstance.onUnload;
    pageInstance.onUnload = function() {
      // 清理Store绑定
      if (this.storeBindings) {
        this.storeBindings.destroyStoreBindings();
      }
      
      // 调用原始onUnload
      if (originalOnUnload && typeof originalOnUnload === 'function') {
        originalOnUnload.call(this);
      }
    };
  } catch (error) {
    console.error('设置Store绑定失败:', error);
    errorHelper.logError('Store绑定', error);
  }
}

/**
 * 在页面加载时安全初始化
 * @param {Page} pageInstance - 页面实例
 * @param {Object} options - 配置选项
 */
function initPageSafely(pageInstance, options = {}) {
  try {
    // 初始化Store
    const store = initStoreSafely(pageInstance, {
      setupStoreBindings: options.useStore !== false
    });
    
    // 添加错误处理方法
    pageInstance.handleError = function(error, context) {
      return errorHelper.handleError(error, context);
    };
    
    // 添加全局错误恢复方法
    pageInstance.recoverFromError = function() {
      errorHelper.resetStoreState(this.store);
      this.setData({ isLoading: false, loadingError: false });
    };
    
    return store;
  } catch (error) {
    console.error('安全初始化页面失败:', error);
    return null;
  }
}

// 导出模块
module.exports = {
  initStoreSafely,
  setupStoreBindings,
  initPageSafely
}; 